Notas de despliegue de la app botadero en debian 8 con NGINX

basado en:
* http://flaviusim.com/blog/Deploying-Flask-with-nginx-uWSGI-and-Supervisor/
* https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-14-04

Prerequisitos
=============

 * Esta prueba se ha realizado sobre Debian GNU/Linux 8 y NGINX instalado.
 * Se asume que el directorio de localizacion de la app es /srv/botadero/
 * Para poder ejecutar la app y permitir comunicar uwsgi con NGINX se debe
   instalar python-virtualenv y tener instalado python-pip, python-dev
   y herramientas para compilacion de paquetes (build-essential)

 * Es necesario activar crear y activar el entorno virtual python:

   $ virtualenv venv
   $ . venv/bin/activate
 
 * Para poder ejecutar la app se debe instalar los paquetes listados en
   Docu/pip_install.txt con:
   
   $ pip install Flask
   $ pip install uwsgi

 * Copiar la carpeta del proyecto botadero en el directorio /srv/botadero
 * Cambiar el usuario y grupo
     
     chown -R www-data:www-data /srv/botadero

botadero.ini
============

Este archivo indica como actuar a uwsgi se puede usar el que contiene el 
repositorio ubicado en el directorio raiz de la app. 
(se asume /srv/botadero/botadero.ini)

  [uwsgi]
  module = wsgi

  master = true
  processes = 5

  socket = botadero.sock
  chmod-socket = 660
  vacuum = true

  die-on-term = true

Config de NGINX
===============

  Asumiendo que se creara otro virtualhost en nginx para la app se puede crear
  un nuevo archivo en /etc/nginx/sites-available/botadero con contenido:

   server{
	#listen puerto;
	listen 80;
	server_name dominio_del_server_o_IP;
	
	# permite la subida de archivos de hasta 5000 MB
	client_max_body_size 5000M; 

	location / {
		 include uwsgi_params;
		 uwsgi_pass unix:/srv/botadero/botadero.sock;
	}
   }

  Luego de guardar el archivo enlazarlo:

   sudo ln -s /etc/nginx/sites-available/botadero /etc/nginx/sites-enabled

  Para probar el configs en NGINX:

   sudo nginx -t

  Si funciona reiniciar nginx

   sudo service nginx restart

Probar UWSGI con NGINX
======================

Se puede probar que todo funciona bien con uwsgi haciendo:

  $ sudo -u www-data uwsgi --ini botadero.ini 

En el directorio donde esta la app  (/srv/botadero/) con el entorno virtual activo,
sin activar el entorno virtual se puede usar:

  $ sudo -u www-data venv/bin/uwsgi --ini botadero.ini

Al abrir un navegador en la ruta y puerto especificada en el archivo de config
de Nginx se deberia poder usar la app.

Ejecutar al inicio
==================

Se deberia agregar un script para hacer ejecutar 
  sudo -u www-data vevn/bin/uwsgi --ini botadero.ini
al inicio del sistema o usar otros programas como supervisor o usar un script
mejor elaborado.

Ejemplo del script muy basico (por ejemplo en: /etc/init.d/botadero-init.sh)

  #!/bin/sh
  if [ $UID -ne 0 ]
  then
	echo "debe ser superusuario"
	exit 1
  fi

  RUTA_ENTORNO_VIRTUAL=/srv/botadero/venv
  cd $RUTA

  sudo -u www-data $RUTA_ENTORNO_VIRTUAL/bin/uwsgi --ini botadero.ini   

Dar permisos:

    sudo chmod +x /etc/init.d/botadero-init.sh 

Incluir en inicio:

    sudo update-rc.d botadero-init.sh defaults 99

TODO: (AVISO! configuracion no funcional) Supervisor
====================================================

Para hacer que la aplicacion se ejecute al inicio se puede usar supervisord

  $ sudo apt-get install supervisor

Se debe crear un archivo para indicarle a supervisor como actuar este un
ejemplo en :


[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10          ; (num of main logfile rotation backups;default 10)
loglevel=info               ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false              ; (start in foreground if true;default false)
minfds=1024                 ; (min. avail startup file descriptors;default 1024)
minprocs=200                ; (min. avail process descriptors;default 200)

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket

[program:botadero]
command=/srv/botadero/venv/bin/uwsgi --ini /srv/botadero/botadero.ini
directory=/srv/botadero
autostart=true
autorestart=true
stdout_logfile=/srv/botadero/logs/uwsgi.log
redirect_stderr=true
stopsignal=QUIT 


Luego terminar los procesos de supervisor

ps -A | grep supervisor
kill <id>
sudo supervisord -c /etc/supervisord.conf


Mas referencia revisar: http://supervisord.org/configuration.html
